package cn.lix.sc.elasticsearch.utils;

import cn.lix.sc.elasticsearch.constants.EsNullValue;
import cn.lix.sc.elasticsearch.dto.FirstTestDTO;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;

public class TestUtils {

    private static Random random = new Random(9999999);

    public static final String ZH_SOURCE = "其实这是一篇不错的励志文通篇的内容可以概括为在现代社会个人首先必须打破迷茫现状制定清晰人生规划明确目标利用碎片时间提高学习力培养独特的核心竞争力并且拥有与异性父母领导和朋友高效的沟通力在生活中做个自律的人在互联网时代学会使用社交软件控制自己的情绪扮演好自己的角色整篇文章可谓满满的正能量读完血液都得沸腾起来李尚龙老师以自己的人生为例结合当今社会的现状明白告诉大家唯有孤注一掷不留退路的奋斗才会有更好的前途拥有理想的自由生活" +
            "这些配置选项都有经过优化的默认配置值除非你非常在实际项目中进行二次开发你需要非常熟悉清楚这些配置的作用以及知道为什么去修改它生活对每个人都不可能是绝对公平的每个人起点高低不一在追逐梦想的路上付出的努力也不同然而当陷于迷茫的时候看看李老师的书补充一点鸡汤营养的确是不错的选择文中有一个观点“强者都是逆着基因生长基于人类趋利避害的本能追求舒服是基因的顺势然而自律才能自由的道理又逼迫人不能顺着天性生长真正的强者都会逆着人的惰性基因让自己变强超厉害慢慢获得经济自由身体自由最终灵魂才能过上梦想自由的生活";


    private static String EN_SOURCE = "RepositoryConfigurationDelewwelasticcogUIDEENELAsticsearchreferencgateBootstrappiNGSPRINGDAtaReactiveElasticsearchrEPOSIToriesinDEFAULTmode";

    public static List<FirstTestDTO> createList(int startId, int size){
        List<FirstTestDTO> dtoList = new ArrayList<>(size);
        FirstTestDTO dto;
        for (int i = 0; i < size; i++) {
            int random = random();
            dto = new FirstTestDTO();
            String strCn10 = getStrCn(10);
            String strCn20 = getStrCn(20);
            String strCn50 = getStrCn(50);
            String strEn10 = getStrEn(10);
            String strEn16 = getStrEn(16);
            dto.setId(String.valueOf(i + startId));
            dto.setLastTitle(strCn10);
            dto.setCustomerLabelText(strCn50);
            dto.setPlatformType(random % 8);
            dto.setNextCommunicateTime(new Date(System.currentTimeMillis() - random));
            dto.setOppotunitySource(strCn20.concat(strCn50));
            dto.setPayYear(strCn20);
            dto.setMemberId(strEn10);
            dto.setBcustomerId(Long.valueOf(random));
            dto.setCommunicateStatus(random % 50);
            dto.setCreateWorkCode(strEn10);
            dto.setOppotunityStatus(strEn16);
            dto.setBindDeleted(random % 2);
            dto.setLongInsureNum(random);
            dto.setIsClinch(random % 9999);
            dto.setHesitatePeriodPremium(random % 10000);
            dto.setAllocateTime(new Date(System.currentTimeMillis() - random * 2));
            dto.setDescription(strCn50.concat(strCn20).concat(strCn10));
            dto.setRemark(strEn10.concat(strCn20).concat(strEn16).concat(strCn10).concat(strCn50));
            dtoList.add(dto);
        }
        return dtoList;
    }


    public static FirstTestDTO createOne(Integer id){
        int random = random();
        FirstTestDTO dto = new FirstTestDTO();
        String strCn10 = getStrCn(10);
        String strCn20 = getStrCn(20);
        String strCn50 = getStrCn(50);
        String strEn10 = getStrEn(10);
        String strEn16 = getStrEn(16);
        dto.setId(String.valueOf(id));
        dto.setLastTitle(strCn10);
        dto.setCustomerLabelText(strCn50);
        dto.setPlatformType(/*random % 8*/EsNullValue.NUMBER.getValue());
        dto.setNextCommunicateTime(new Date(System.currentTimeMillis() - random));
        dto.setOppotunitySource(strCn20.concat(strCn50));
        dto.setPayYear(strCn20);
        dto.setMemberId(EsNullValue.STRING.getValue());
        dto.setBcustomerId(Long.valueOf(random));
        dto.setCommunicateStatus(random % 50);
        dto.setCreateWorkCode(strEn10);
        dto.setOppotunityStatus(strEn16);
        dto.setBindDeleted(random % 2);
        dto.setLongInsureNum(random);
        dto.setIsClinch(random % 9999);
        dto.setHesitatePeriodPremium(random % 10000);
        dto.setAllocateTime(new Date(System.currentTimeMillis() - random * 2));
        dto.setDescription(strCn50.concat(strCn20).concat(strCn10));
        dto.setRemark(strEn10.concat(strCn20).concat(strEn16).concat(strCn10).concat(strCn50));
        return dto;
    }


    private static String getStrCn(int length) {
        char[] c = new char[length];
        for (int i = 0; i < length; i++) {
            int random = random();
            int index = random % ZH_SOURCE.length();
            c[i] = ZH_SOURCE.charAt(index);
        }
        return String.valueOf(c);
    }

    private static String getStrEn(int length) {
        char[] c = new char[length];
        for (int i = 0; i < length; i++) {
            int index = random() % EN_SOURCE.length();
            c[i] = EN_SOURCE.charAt(index);
        }
        return String.valueOf(c);
    }

    private static int random() {
        int i = random.nextInt();
        return i < 0 ? -i : i;
    }
}
